package java代理.动态代理.CGLIB动态代理;

/**
 * @author: wh(1835734390 @ qq.com)
 * @date: 2023/3/23 11:19
 * @description: 通过继承类的方式实现动态代理
 * CGLIB 创建动态代理类的模式是：
 * 1 查找目标类上的所有非final 的public类型的方法定义；
 * 2 将这些方法的定义转换成字节码；
 * 3 将组成的字节码转换成相应的代理的class对象；
 * 4 实现 MethodInterceptor接口，用来处理对代理类上所有方法的请求
 * @version:
 */
public class CglibTest {
    public static void main(String[] args) {
   /*     DaoProxy daoProxy = new DaoProxy();
        Enhancer enhancer = new Enhancer();
        enhancer.setSuperclass(Dao.class);  // 设置超类，cglib是通过继承来实现的
        enhancer.setCallback(daoProxy);

        Dao dao = (Dao)enhancer.create();   // 创建代理类
        dao.update();
        dao.select();*/
    }
}

/**
 * JDK动态代理与CGLIB动态代理对比
 * JDK动态代理：基于Java反射机制实现，必须要实现了接口的业务类才能用这种办法生成代理对象。
 *
 * cglib动态代理：基于ASM机制实现，通过生成业务类的子类作为代理类。
 *
 * JDK Proxy 的优势：
 *
 * 1最小化依赖关系，减少依赖意味着简化开发和维护，JDK 本身的支持，可能比 cglib 更加可靠。
 * 2平滑进行 JDK 版本升级，而字节码类库通常需要进行更新以保证在新版 Java 上能够使用。
 * 3代码实现简单。
 * 基于类似 cglib 框架的优势：
 *
 * 1无需实现接口，达到代理类无侵入
 * 2只操作我们关心的类，而不必为其他相关类增加工作量。
 * 3高性能
 */
